home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************/
- /* HEADER FILE FOR DATABOSS MODULE: DB_TREE */
- /****************************************************************************/
-
- /******************************* CONSTANTS ********************************/
-
- #ifndef __TURBOC__
- #define _close(h) close(h)
- #define _open(p,m) open(p,m)
- #define _creat(p,m) creat(p,m)
- #endif
-
- #define DB_fhs 20
- #define DB_Klen 41
- #define DB_ps 36
- #define DB_ord 18
-
-
- #ifdef DEBUG
- #define DB_pstack 4
- #define DB_mht 16
- #define DB_mxdrs 1024
- #else
- #define DB_pstack 32
- #define DB_mht 16
- #define DB_mxdrs 4096
- #endif
- #define DB_mdrs DB_fhs
- #define Lock 0
- #define UnLock 1
- #define RecLocked 100
- #define IsLocked -100
- #define ErrFileNm "DBIOERR.OR"
-
- #define ItemOverhead 9
- #define PageOverhead 5
- #define NoDuplicates 0
- #define Duplicates 1
- #define RecTooLarge 1000
- #define RecTooSmall 1001
- #define KeyTooLarge 1002
- #define RecSizeMismatch 1003
- #define KeySizeMismatch 1004
- #define MemOverflow 1005
-
- /********************************* TYPES **********************************/
-
- typedef uchar fileasciiz[64];
- typedef uchar filename[67];
- typedef struct {
- /* internal file record for use with lo-level file routines and keeping
- sufficient data for db_tree internal routines to access */
- int handle;
- word recsize;
- filename name;
- } filerec;
- typedef struct {
- filerec f;
- long firstfree;
- long numberfree;
- long int1;
- long int2;
- long itemsize;
- long numrec;
- } datafile;
- typedef datafile *datafileptr;
- typedef uchar keystr[DB_Klen+1];
- typedef uchar btkeystr[DB_Klen+1];
- typedef struct {
- long dataref;
- long pageref;
- btkeystr key;
- } btitem;
- typedef btitem *btitemptr;
- typedef struct {
- byte itemsonpage;
- long bckwpageref;
- btitem itemarray[DB_ps];
- } btpage;
- typedef btpage *btpageptr;
- typedef struct {
- long pageref;
- long itemarrindex;
- } btsearchstep;
- typedef btsearchstep btpath[DB_mht];
- typedef btsearchstep *btsearchstepptr;
- typedef struct {
- datafile dataf;
- bool allowduplkeys;
- byte keyl;
- long rr;
- long pp;
- btpath path;
- } indexfile;
- typedef indexfile *indexfileptr;
- typedef struct {
- btpage page;
- indexfileptr indexfptr;
- long pageref;
- bool updated;
- } btstackrec;
- typedef btstackrec *btstackrecptr;
- typedef btstackrec btpagestack[DB_pstack];
- typedef btpagestack *btpagestackptr;
- typedef word btpagemap[DB_pstack];
- typedef btpagemap *btpagemapptr;
- typedef union {
- btstackrec page;
- byte r[DB_mxdrs];
- long i;
- } btrecordbuffer;
- typedef btrecordbuffer *btrecordbufptr;
- typedef void (*backdoor)(void);
- typedef uchar errorstring[81];
-
- /************************* INITIALIZED VARIABLES **************************/
-
- extern bool ignoresizediff; /* = False */
- extern bool multiuser; /* = False */
- extern bool flush_df; /* = False */
- extern bool flush_if; /* = False */
-
- /******************************** VARIABLES *******************************/
-
- extern byte errstatus;
- extern word btstatus;
- extern bool ok;
- extern bool lockget;
- extern btrecordbufptr btrecbuf;
- extern btpagestackptr btpagestk;
- extern btpagemapptr btpgmap;
- extern backdoor shutdown;
- extern bool recursive;
- extern int retries;
- extern int idx_retries;
- extern int _loop_count;
- extern word _vidseg;
- extern int desiredhandle;
-
- /******************************* PROTOTYPES *******************************/
-
- strptr ioerrstr(strptr sout, int n);
- void addkey(indexfile *idxf, long *datarecnum, void *prockey);
- void addrec(datafile *datf, long *r, void *buffer);
- void clearkey(indexfile *idxf);
- void closefile(datafile *datf);
- void closeindex(indexfile *idxf);
- void deletekey(indexfile *idxf, long *datarecnum, void *prockey);
- void deleterec(datafile *datf, long r);
- void erasefile(datafile *datf);
- void eraseindex(indexfile *idxf);
- void flushfile(datafile *datf);
- void flushindex(indexfile *idxf);
- long filelen(datafile *datf);
- void findkey(indexfile *idxf, long *datarecnum, void *prockey);
- void getlockedrec(datafile *datf, long r, void *buffer);
- void getrec(datafile *datf, long r, void *buffer);
- void initindex(void);
- void makefile(datafile *datf, strptr fname, word reclen);
- void makeindex(indexfile *idxf, strptr fname, byte keylen, byte s);
- void nextkey(indexfile *idxf, long *datarecnum, void *prockey);
- void openfile(datafile *datf, strptr fname, word reclen);
- void openindex(indexfile *idxf, strptr fname, byte keylen, byte s);
- void prevkey(indexfile *idxf, long *datarecnum, void *prockey);
- void putrec(datafile *datf, long r, void *buffer);
- void searchkey(indexfile *idxf, long *datarecnum, void *prockey);
- long usedrecs(datafile *datf);
- int lock_datf(datafile *datf, long rno, byte lck);
- int lock_indexf(indexfile *indexf, long rno, byte lck);
- void resetstatus(void);
-
- void db_tree_init(void);
-
- /***************************** END OF DB_TREE.H *****************************/
-